作成の基本
基本的な理屈
フォーマット1説明
フォーマット2説明
フォーマット3・4説明
歌詞について
背景について
拡張機能
注意事項
エキスパートモード作成方法
アップロードの方法
汎用背景集
サリングS本体(右クリック保存)
オリジナルデータを作成するには、上のサリングS本体(crs.swf)の他に、以下のファイルを用意する。
それぞれ、ファイル名は変更できない。
bgm.mp3
演奏用音声ファイル。
mp3形式であり、サンプリングレートが11kHz/22kHz/44kHzのいずれかである必要がある。
曲の最後の0.1秒間は演奏されない。
data.txt 雛形(右クリック保存)
譜面データファイル。
テキストファイルであり、以下の形式で作成する。
↓は、改行である。
head=crs1↓ &title=データのタイトル↓ &music_by=作曲者名(省略可)↓ &data_by=データ作成者名(省略可)↓ &bgm_vol=音声ファイル音量(単位%)↓ &level1=第1譜面(EASY)の難易度(1~9)(第1譜面が無い場合不要)↓ &level2=第2譜面(HARD)の難易度(1~9)(第2譜面が無い場合不要)↓ &format=譜面フォーマット(1~4)↓ &start_time=演奏開始時間(秒)(譜面フォーマット2の場合不要)↓ &unit_time=単位時間(秒)(譜面フォーマット2の場合不要)↓ &seq1=↓ (第1譜面データ)↓ &seq2=↓ (第2譜面データ)↓ &lyric=↓(歌詞が無い場合不要) (歌詞データ)↓
ヘッダ head=crs11行目には必ずこの通りに記述する。
title項は、データのタイトルである。通例として使用曲の曲名をそのまま使う場合が多い。
title項
music_by項
data_by項
music_by項は、作曲者の事である。
data_by項は、データの作成者(貴方)の事である。
演奏するmp3ファイルの音量を指定する。通常100であり、単位は%。
bgm_vol項
効果音と音量があまりに異なる場合に変更する。
1つのデータファイルには2つの譜面を記述することが出来る。
level1項
level2項
それぞれ、level1項=第1譜面(EASY)、level2項=第2譜面(HARD)、という名前がついている。
それぞれの譜面について、存在しないならばその項は記述しない。
存在するのならば、難易度を1~9の範囲で記述する。数が多いほど難しいという意味である。
また、リングの速度は EASY=遅い HARD=速い で固定であり、変更できない。
譜面データは以下の形式(フォーマット)で書く事が出来る。
format項
format=1 の時、フォーマット1で記述する。これは、1拍ずつのデータを順番に書き連ねていく形式である。途中でテンポや拍の長さが変わる曲には正しく対応できない。
format=2 の時、フォーマット2で記述する。これは、リング1つごとに絶対時間を細かく記述する形式であり、何らかの方法(ツール等)で時間の計算が出来ることが前提となっている。
format=3か4 の時、フォーマット3・4で記述する。これは、フォーマット1に汎用性を持たせた形式である。
譜面データ作成の基本的な理屈
まず、1拍の長さを決定する。
1拍とは譜面の最小単位であり、たとえば4分音符だけで構成出来るデータであれば、1拍の長さは4分音符になる。ひとつでも8分音符が混ざっていれば、最小は8分音符になるので、1拍の長さは8分音符である。
1拍の実時間が、単位時間(unit_time項)となる。
これを計測する。この計測が正しく出来ないとまともなデータにはならない。
計測のために、曲から始点と終点を選ぶ。
曲の速度(テンポ)が変わらず、拍子がはっきりしており、かつ、なるべく長い部分を選ぶ。
(4拍ぶんを計測して4で割るよりも、200拍ぶんを計測して200で割ったほうが遥かに信頼出来る結果になるため)
MP3DirectCutなど、音声ファイルの「5.127秒地点」のように細かい計測が出来るソフトを使い、始点と終点の間(区間)の時間を計測する。
その区間が1拍の長さの何倍かを数え、区間の実時間から割ることで、単位時間が求められる。小数を丸めないこと。
始点時間 + (単位時間 × 拍数) ≒ 終点時間
となる事を確認すること。誤差は最低でも0.1秒以下に。
例:
使用曲の中で「始点2.612秒」から「終点32.104秒」を「54拍」(4分音符×54)ぶんの長さとして計測する。
(32.104[秒] - 2.612[秒]) ÷ 54[拍] = 0.5461481[秒]
という計算により、この曲の単位時間は0.5461481秒となる。
次に、演奏開始時間(start_time項)を決める。
譜面データは、演奏開始時間以降にしか設定できない。
譜面データの一番最初にリングを置いた場合、それは演奏開始時間と同じ時間に現れることになる。
問題がなければ、先に使った始点をそのまま使うと良い。
演奏開始時間から単位時間をどれだけ足しても、実際の拍とずれていない事が絶対条件である。
譜面データ(seq1~seq2項)は、以下のように記述する。
このように、その拍に発生するリングの情報を、1拍ごとに半角のカンマで区切って書き連ねていく。
1拍目のデータ,2拍目のデータ,3拍目のデータ, …
リングのない拍は、何も書かない。
改行は全て無視されるので、見やすくするためにいくらでも改行してよい。
データの内容は以下である。
例えば一番左上にリングが発生し、取った時にシンバルが鳴る場合は「113」となる。
データ 内容 3桁の数字 百の位…リングの横座標(左 1~7 右)
十の位…リングの縦座標(上 1~5 下)
一の位…リングを取った時に鳴る音の種類
0..無音
1..タンバリン(シャン)
2..クラップ(パン)
3..シンバル(ジャーン)
901 この地点から曲の演奏を開始する 999 この地点で曲を終了する
右下でタンバリンなら「751」。画面中央は「43?」。
以上を踏まえて、例えばこのように記述する。
999の時点で曲が終わる。
&seq1= 433,,,,433,,,, 121,221,321,421,521,621,721,, 433,,,,433,,,,999
見やすくするために、8拍ごとに改行している。
フォーマット2の場合、単位時間という概念は無く、単純に全てのリングの到着時間を秒で指定する。
譜面データ(seq1~seq2項)は、以下のように記述する。
このように、リング1つのデータごとに半角カンマで区切り、さらにその中で、半角スラッシュで区切って記述する。
1つ目のリングの到達時間(秒)/1つ目のリングの内容, 2つ目のリングの到達時間(秒)/2つ目のリングの内容, 3つ目のリングの到達時間(秒)/3つ目のリングの内容, :
改行は全て無視されるので、見やすくするためにいくらでも改行してよい。
リングの内容は以下である。(フォーマット1と同じ)
データ 内容 3桁の数字 百の位…リングの横座標(左 1~7 右)
十の位…リングの縦座標(上 1~5 下)
一の位…リングを取った時に鳴る音の種類
0..無音
1..タンバリン(シャン)
2..クラップ(パン)
3..シンバル(ジャーン)
901 この地点から曲の演奏を開始する 999 この地点で曲を終了する
以下は例である。
いちいち手計算しながら時間を求めるという手間はありえないので、何らかのツールなどで計算する事が前提となっている。
&seq1= 9.023796/141, 9.569389/141, 9.842185/342, 10.114981/442, 10.387777/542, 10.660573/642, 11.206166/721, 11.751758/721, 12.024554/522, 12.297350/422, 12.570146/322, 12.842943/222, 13.115739/333, 13.388535/333, :
フォーマット3・4は、フォーマット1に汎用性を持たせた書式である。
フォーマット1を理解した上で読むこと。
演奏開始時間(&start_time) が必要である。(「B/」であとで指定するなら不要)
単位時間(&unit_time) は不要である。
フォーマット1が1拍(=1データ)ごとに記述するのに対して、フォーマット3・4では1行に1小節のデータ(行データ)を記述する。
行データは5種類ある。
以下に当てはまらない行や空行は無視される。
このように、行の頭に半角シャープ(#)がある場合、その行は小節時間の設定である。
#1.512642
これは1小節の長さを秒単位で記述する。1拍ではない点に注意。
この設定は何度でも行える(変更できる)。
最初の段階では小節時間は設定されていないので、最初のデータを書く前に必ず設定が必要である。
このように、行にいくつかの半角カンマ(,)がある場合、その行は譜面データである。
431,,431,,431,,431,
1行に1小節ぶんのデータを記述する。
記述する内容はフォーマット1と同じである。
1小節がカンマの位置で分割される。フォーマット3と4で、分割のされ方が異なる。
フォーマット3と4の違いはこの点だけである。
フォーマット3の時、(カンマの数+1)に分割される。
123,123,123,123,123,123,123,123
この例ではカンマは7つであるので、8分割される。
この1小節は8拍であり、1拍は8分音符の長さということになる。
フォーマット4の時、(カンマの数)に分割される。
123,123,123,123,123,123,123,123,
上の例ではカンマは8つであるので、8分割される。
この1小節は8拍であり、1拍は8分音符の長さということになる。
最後のカンマより右に書いたデータは無視される。
このように、行の頭に半角文字で「B/」とある場合、その行は演奏開始時間の再定義である。
B/12.5
これまでのデータに関係なく、演奏開始時間を決め直して、次のデータの時間を決定する。
間奏などで間が空き、次のノートの時間までの補完が面倒な場合などに使う。
時間を遡らないようにすること。
このように、行の頭に半角文字で「/」がある場合、その行は明確にコメント行と判断される。
/コメント行だわさ
(全ての行データに当てはまらない行は無視されるので、厳密にはわざわざ明確にする必要はない)
コメント行は無視される。
フォーマット3の例
&seq1= #1.5 ←ここから、1小節を1.5秒とする(この設定は必ず最初に必要) 431,431,431,431 ←4分割されるので、4分音符×4になる 433,433,433,433 431,,431,,432,432,432, ←8分音符を含むため、この行(小節)だけ8分割 133,133,133 ←この行(小節)だけ3連符 /第2パート ←コメント #1.8 ←ここから、1小節を1.8秒に変更 B/20 ←演奏開始時間を20秒に再定義。次のデータは20秒目になる 431,,,,431,,, 433,,,,433,,,
歌詞を表示する事が出来る。表示しない場合はlyric項は書かないこと。
歌詞は以下の書式で設定する。
このように、時間と文字列を並べていく。時間順に並べること。
&lyric= 表示が変わる時間(秒)/表示される文字, 表示が変わる時間(秒)/表示される文字, :
表示を消したい場合はスペース(ヌルでも良い)を表示させること。
以下は例である。ちなみに、FLASHで使えるHTMLタグが使用可能である。
&lyric= 7.2/「朝」「サンドイッチ」食べながら, 10.4/「地図」を見ていた 「ずる休み」の午後, 13.8/「道草」は「寂しい」心, 17.1/「癒す」ためには 必要なこと, 20.5/「すべり台」転がり 少し「意地悪」に,
ちなみに、escapeされた文字列で書いてもよい。
本来の流星背景のかわりに、自分で用意した背景画像を使用する事が可能である。
背景は400x400のjpgファイルかswfファイル(40fps/SWF6)が使える。
背景用ファイルは、data.txtと同じ場所に置く。
400x400とはゲーム全体の大きさであるので、画面上部と下部が隠れる事を考慮する必要がある。
data.txtのどこかに以下を記述する。
&backfile=背景ファイル名(相対パス) &back_alpha=背景の不透明度(100の時標準)
背景を読み込むタイミング
背景ファイルは事前に読み込まれず、ゲーム開始時の「READY」が出た瞬間に読み込みが始まり、それが終わり次第画面に反映される。
ファイルサイズの大きい背景ファイルを使用する場合には留意のこと。
swfで作成する際の注意
背景swfはサリング本体のスプライト「_root.star」の中に読み込まれるので、背景の中で_rootを指すとそれはサリング本体の_rootを指す。
ターゲットの絶対指定をする場合は注意の事。
ストリーミング再生やフレーム数の進行を信じて同期を取るのは無謀なのでやめておいたほうが良い。
背景swfからは以下の変数が利用できる。
(常識事項:デバイスフォントの不透明度は変えられない)
_root.st_bgmpos //曲の進度(ミリ秒) _root.bgm.duration //曲の長さ(ミリ秒) _root.st_life //体力(%) _root.st_score //得点 _root.st_ok //OK数 _root.st_late //LATE数 _root.st_ng //NG数 _root.st_combo //現在のコンボ数 _root.st_maxcombo //最大コンボ数 _root.st_nofring //リング総数 _root.st_ver //本体のバージョン番号の100倍の数 _root.st_speedv //拡張速度(0~5) _root.st_mode //ゲームの状態
ゲームの状態とは、以下の各項目に当てはまる数の合計である。 (SPEEDかつSMALLであれば、1+2で3になる) SPEED ... 1 SMALL ... 2 HIDDEN ... 4 SHADOW ... 8 BLIND ... 16 CATCHER ... 32 HARD ... 64 PRACTICE...128 AUTOPLAY...256
ver2.07より、以下の機能が使えるようになった。
追加音
3種類の効果音に加えて、用意したmp3ファイルを効果音に使う事ができる。
追加音と呼ぶ。
それらは、以下のようなファイル名にする。
このように、最大で32個の追加音を扱う事ができる。
音番号 ファイル名 0 (無音) 1 (タンバリン) 2 (クラップ) 3 (シンバル) 4 4.mp3 5 5.mp3 : : 9 9.mp3 a a.mp3 b b.mp3 c c.mp3 : : z z.mp3
アルファベットは全て小文字である。
mp3ファイルの仕様はbgm.mp3と同じである。音量は揃えておくこと。
data.txtのどこかに以下の記述をすること。
追加音の数が 2 であれば、
&addsnd=追加音の数
追加音を2つ、つまり 4.mp3 と 5.mp3 を使うという事になる。
ここで指定されただけのmp3ファイルが無い場合、読み込み中に停止する。
使うには普通のリングと同じく、リングを表す3桁の数において、1の位に音番号を書く。
758 …横7縦5で、効果音は8番 43c …横4縦3で、効果音はc番
座標の拡張
リングの座標は横7x縦5であったが、もっと細分化した指定が可能である。
新たな座標の指定は、5桁の数で表される。
XXYYS XX = 横座標(10~70) 10の時従来の1と同じ、70の時従来の7と同じ。 YY = 縦座標(10~50) 10の時従来の1と同じ、50の時従来の5と同じ。 S = 音番号(1~9,a~z)
これまでの3桁の記述と混ぜて使ってもよい。
・曲の演奏開始(901を含む)から2秒の間にリングが存在すると自動的に消去される。
その場合、「any rings erased」と表示される。
完成したデータでは、この表示が出るべきではない。
・実は7×5の範囲の外にもリングを置く事が出来るが、結果及び将来的にどうなるかは保証しない。
決められた条件下で連続してプレイするモードをエキスパートモードと呼ぶ。
複数の音声ファイル・譜面ファイルが必要となる。
必要な全てのゲームをそれぞれ単独でプレイ出来る状態にし、
それとは別のゲームを作成する。
そのdata.txtは特殊であり、以下の書式になる。
head=crs1↓ &title=コース名↓ &expdata=構成データ↓
構成データは、以下の書式である。
&expdata=面数,URLデータ,オプションデータ,OK時体力変動値,LATE時体力変動値,NG時体力変動値,1秒毎体力変動値
URLデータは、各必要なファイルの場所を示すものである。
このエキスパート用のcrs.swfから見て、対象のdata.txtとbgm.mp3がある場所を相対パスで記述し、必ず半角スラッシュ「/」で終わらせる。
これを「?」で区切って面数ぶん並べる。
例: http://cirring.com/exp/crs.swf ←このエキスパート用swfから http://cirring.com/sng/data.txt ←これを指す場合 URLデータとして記述する内容は、 ../sng/ となる。
例: http://cirring.com/exp/crs.swf ←エキスパート用swf http://cirring.com/sno/data.txt ←1面 http://cirring.com/cha/data.txt ←2面 http://cirring.com/hst/data.txt ←3面 URLデータとして記述する内容は、 ../sno/?../cha/?../hst/ となる。3面あるので ? で区切って3つ並べる。
リストモードの為にファイルの場所を変えた場合は、以下のような記述が出来る。 (本体ver2.07以降) ../lst/ → 通常の data.txt を指す ../lst/#2 → 2 というフォルダの中のdata.txt を指す
オプションデータは、各面で強制的に適用される条件を記述する。面数のぶんだけ「?」で区切って並べる。
オプションデータは4桁の数字で表され、その内容は以下である。
千の位 ... 適用する譜面 (1=EASY 2=HARD) 百の位 ... リング速度 (0=EASYと同じ 1=HARDと同じ 8=超遅い 9=超速い) 十の位 ... SMALLオプション (0=無効 1=有効) 一の位 ... CATCHERモード (0=無効 1=有効) CATCHERモードが有効の時は、リング速度は(0=標準 1=全てのボールの速度が同じ)になる。 例: 1面…EASY譜面、リング速度EASY、SMALL無効、CATCHER無効 →「1000」 2面…HARD譜面、リング速度超速、SMALL有効、CATCHER有効 →「2911」 まとめて書くと、 1000?2911 となる。
OK時体力変動値は、OKを取った時の体力の変動量。
LATE時体力変動値は、LATEを取った時の体力の変動量。
NG時体力変動値は、NGを取った時の体力の変動量。
1秒毎体力変動値は、開始から5秒以降、1秒ごとに自動的に変動する量。
単位は%であり、正数なら増え、負数なら減る。小数も使える。
以上をまとめた例は以下である。
head=crs1 &title=ぶっちゃけありえないコース &expdata=3,../foc/?../dd/?../waf/,1800?2910?2001,2,1,-10,-1
以上のようにdata.txtを作成したら、あとは普通のゲームと同様に開始すればエキスパートモードが開始される。
全てのファイルが用意出来たら、FLASH再生用のhtmlファイルを作成する。
よくわからなければ、右クリック保存。
(拡張子をhtmlに変更すること)
以上全てのファイルをサーバーの同じディレクトリ(フォルダ)に置く事で作業が完了する。
crs.swf bgm.mp3 data.txt 再生用html 追加音のファイル(必要ならば) 背景のファイル(必要ならば)
data.txtはテキストファイルなのでアスキー転送する事。
再生用htmlを表示してテストすること。
ローカルでプレイする際も同じディレクトリであれば動作する。
複数のゲームを置く場合でも、crs.swfはひとつだけ置けばよい。
そうする場合は、再生用htmlの、
"crs.swf" となっている部分を、 "http://ccc.rrr.sss/crs.swf" のように、絶対パスまたは相対パスで、crs.swfのある場所を含めて記述する。
上のサンプルの再生用htmlでは、「crs.swf」の記述は2箇所あるので両方書き替えること。
拡張シーケンス処理 extseq
extseq.swf (ver5)(右クリック保存)
extseqは、サリングE R-TRACKで使われていた、「ボール」と「スター」を実装可能にする。
背景ファイルとして表示すること。
ボール
白い線が引かれてその上に赤い玉が出現し、線にそって動く。
玉の動きに合わせて、その上にカーソルを乗せていなければならない。玉からカーソルが外れている間、体力が減少する。
スター
残り時間を示す水色の線と、黄色い星が出現する。
星はカーソルで触れると取る事が出来、そこから右回りの位置に次の星が現れる。
時間がなくなるまでに、星を指定数取らなければならない。失敗すると体力が減少する。
背景と同じ場所に、テキストファイル「extseq.txt」が必要である。
その内容は以下である。
&seq= (物体データ), (物体データ), : : &nosnd1=1 (ボールが転がる時の音を消す場合はこれを書く) &nosnd2=1 (ボールが終わった時のシンバルの音を消す場合はこれを書く)
物体データには、以下の5種類がある。
いずれも、「時間」とは秒単位、
座標とはドット単位の値(X=0~400,Y=0~400)である。
直線移動のボール #1/開始時間/終了時間/開始X座標/開始Y座標/終了X座標/終了Y座標 開始座標から終了座標まで、直線的にボールが動く。 周回移動のボール #2/開始時間/終了時間/中心X座標/中心Y座標/X方向半径/Y方向半径/開始角度/終了角度 中心座標を中心として、示された半径の楕円があると仮定し、その円周上をボールが動く。 角度とは、真右が0度であり、右回りに数え、1周で360度である。 継続的な直線移動のボール #3/〜(残りは直線移動のボールと同じ) 前回のボールに続けて直線移動のボールを開始する。 前回の終了時間と終了座標、今回の開始時間と開始座標が同じでなければならない。 継続的な周回移動のボール #4/〜(残りは周回移動のボールと同じ) 前回のボールに続けて周回移動のボールを開始する。 前回の終了時間と終了座標、今回の開始時間と開始座標が同じでなければならない。 座標は中心座標と半径と角度から導かれる事に注意。 直線→周回 というような継続も可能である。 スター #9/開始時間/終了時間/取得ノルマ数 時間内にスターを取得ノルマ数取らなければならない。
作成を支援する→extseq用ツール
ゲーム自体に与える影響は以下である。
・ボール、スターに失敗すると体力が減る。
・得点、評価には影響しない。
(よって、この背景を消したほうが得点は出やすくなる)
・リプレイに本背景の要素は保存されず、再生もされない。
・オートプレイで本背景の要素は処理されない。
ver5 音を消せるようになった
ver4 ボールが画面に2つまで表示されるようになった(前回のボールより1秒空けるという制限が無くなった)、説明文が表示されるようになった
ver3 ボールでミスをしてもボール自体が継続するようになった
ver2 体力が増えないようになった
ver1 初版